Java™ is a platform-independent programming language, developed by Sun Microsystems. An integral component of the Java architecture is the Java Virtual Machine (JVM), which is available on numerous computing platforms in order to provide Java with a high level of platform-independence. The Java 2 Platform, Micro Edition (J2ME™), specifies a scaled-down version of the JVM, known as the K Virtual Machine (KVM), which is designed for mobile wireless information devices such as cellular telephones and personal digital assistants (PDAs).
J2ME currently provides two configurations: Connected Limited Device Configuration (CLDC) and Connected Device Configuration (CDC). CDC was developed for more powerful devices, and therefore supports a full Java 2 Virtual Machine. CLDC is targeted at devices with limited memory and/or processing power, and does not support the full set of standard Java 2 Standard Edition (J2SE) Application Programming Interfaces (APIs). CLDC includes a core development library and specifies the KVM. A Mobile Information Device Profile (MIDP) is layered on top of CLDC and defines a limited set of Java APIs that provide an application runtime environment for mobile information devices, such as mobile telephones and personal digital assistants (PDAs). These APIs, which have the form of classes grouped in class libraries, include the user interface, networking and messaging. MIDP applications that use the MIDP and CLDC APIs are known as MIDlets.
J2SE provides a Java Native Interface (JNI), which is a standard programming interface for writing Java native methods. “Native” in this sense refers to functions of the operating system (OS) that are not accessed via the standard Java APIs. The JNI permits programmers to take advantage of platform-specific functionality outside of the JVM by integrating native code with programs written in Java. Programmers can use the JNI to write native methods to handle situations in which an application cannot be written entirely in the Java programming language. It is useful particularly when the standard Java class library does not support platform-dependent features needed by the application. J2ME, however, does not provide JNI support.